home *** CD-ROM | disk | FTP | other *** search
- // This program finds the weekday to a date. The data is taken from
- // a math-book.
- //
- // ranges:
- // century: 15 - 32
- // year: 0 - 99
- // month: 1 - 12
- // day: 1 - 31
- //
- //
-
- #include <spl_date.dec>
-
- int days[7][5]; int centurys[5][7]; int scenturys[4]; int years[7][18];
- int months[7][7]; int monthd[7][3]; int data[7][7];
-
- int century; int year; int month; int day; int dayname; int row; int col;
- int i; int j; int x; int ok; int data1; int data2; int leapyear;
- int ch1; int ch2;
- int monday; int tuesday; int wednesday; int thursday; int friday;
- int saturday; int sunday; int null;
-
- string date[12];
-
- #include <datedata.n>
-
- lab start;
-
- leapyear = 0;
- print /n;
- ok = 0;
- while ok != 1;
- date = "";
- input "date: dd.mm.yyyy (RETURN to exit): " date;
- if date = ""; exit; endif;
- call spl_date (day, month, year, century, date);
- if day != -1;
- ch1 = day >= 1; ch2 = day <= 31;
- ok = ch1 and ch2;
- if ok != 1;
- print "day range: 1 - 31", /n;
- endif;
-
- ch1 = month >= 1; ch2 = month <= 12;
- ok = ch1 and ch2;
- if ok != 1;
- print "month range: 1 - 12", /n;
- endif;
-
- ch1 = year >= 0; ch2 = year <= 99;
- ok = ch1 and ch2;
- if ok != 1;
- print "year range: 0 - 99", /n;
- endif;
-
- ch1 = century >= 15; ch2 = century <= 32;
- ok = ch1 and ch2;
- if ok != 1;
- print "century range: 15 - 32", /n;
- endif;
- endif;
- wend;
-
- ok = 0;
- i = 0;
- while ok = 0;
- j = 0;
- while j <= 4;
- x = days[i][j];
- if x = day;
- row = i;
- ok = 1;
- endif;
- inc j;
- wend;
-
- if i < 6;
- inc i;
- endif;
- if i > 6;
- ok = 1;
- endif;
- wend;
-
-
- // check if leapyear
-
- i = 0;
- while i <= 3;
- x = scenturys[i];
- if x = century;
- if year = 0;
- leapyear = 1;
- endif;
- endif;
- inc i;
- wend;
-
- x = year mod 4;
- if x = 0;
- leapyear = 1;
- endif;
-
- ok = 0;
- i = 0;
- while ok = 0;
- j = 0;
- while j <= 2;
- x = monthd[i][j];
- if x = month;
- col = i;
- ok = 1;
- endif;
- inc j;
- wend;
-
- if i < 6;
- inc i;
- endif;
- if i > 6;
- ok = 1;
- endif;
- wend;
-
- if leapyear;
- if month = 1;
- col = 1;
- endif;
- if month = 2;
- col = 3;
- endif;
- endif;
-
- data1 = months[row][col];
-
- ok = 0;
- i = 0;
- while ok = 0;
- j = 0;
- while j <= 17;
- x = years[i][j];
- if x = year;
- row = i;
- ok = 1;
- endif;
- inc j;
- wend;
-
- if i < 6;
- inc i;
- endif;
- if i > 6;
- ok = 1;
- endif;
- wend;
-
- ok = 0;
- i = 0;
- while ok = 0;
- j = 0;
- while j <= 5;
- x = centurys[i][j];
- if x = century;
- col = j;
- ok = 1;
- endif;
- inc j;
- wend;
-
- if i < 4;
- inc i;
- endif;
- if i > 4;
- ok = 1;
- endif;
- wend;
-
- data2 = data[row][col];
- dayname = data1 + data2;
-
- ok = 0;
- i = 0;
- while ok = 0;
- j = 0;
- while j <= 4;
- x = days[i][j];
- if x = dayname;
- row = i;
- ok = 1;
- endif;
- inc j;
- wend;
-
- if i < 6;
- inc i;
- endif;
- if i > 6;
- ok = 1;
- endif;
- wend;
-
- dayname = row;
-
- print /n;
- if day < 10;
- print null;
- endif;
- print day, ".";
-
- if month < 10;
- print null;
- endif;
- print month, ".";
-
- print century;
- if year < 10;
- print null;
- endif;
- print year, /s2;
-
- if dayname = sunday;
- printvn sunday;
- endif;
- if dayname = monday;
- printvn monday;
- endif;
- if dayname = tuesday;
- printvn tuesday;
- endif;
- if dayname = wednesday;
- printvn wednesday;
- endif;
- if dayname = thursday;
- printvn thursday;
- endif;
- if dayname = friday;
- printvn friday;
- endif;
- if dayname = saturday;
- printvn saturday;
- endif;
-
- print /n2;
- goto start;
-
- #include <spl_date.sub>
-